import os
import time

import pytest
from commons.logger import log
from config.path import BASE_DIR
# from Ding_send import send_ding_talk_message

# 常量定义
# 测试结果的路径
ALLURE_RESULTS_DIR = os.path.join(BASE_DIR, 'allure-results')
# JUnit XML 报告的路径（用来分析测试结果）
JUNIT_REPORT_PATH = os.path.join(BASE_DIR, 'junit-reports', 'test_report.xml')
# 测试用例的路径
# TEST_CASES_DIR = os.path.join(BASE_DIR, 'testcases')
TEST_CASES_DIR = os.path.join(BASE_DIR, 'testcases/test05_user_management.py')
# TEST_CASES_DIR = os.path.join(BASE_DIR, 'testcases/test05_user_management.py')
# TEST_CASES_DIR = os.path.join(BASE_DIR, 'testcases/test07_network_management.py')
# TEST_CASES_DIR = os.path.join(BASE_DIR, 'testcases/test04_login_and_desktop.py')
# Allure 可视化报告的路径
ALLURE_REPORT_DIR = os.path.join(BASE_DIR, 'allure_report')




def generate_allure_report():
    """生成 Allure 报告"""
    try:
        os.system(f'allure generate {ALLURE_RESULTS_DIR} -o {ALLURE_REPORT_DIR} --clean')
        log.debug("Allure 报告生成成功。")
    except Exception as e:
        log.error(f"生成 Allure 报告时出现错误: {e}")


def run_pytest():
    """运行 pytest 测试用例"""
    try:
        pytest_args = ['-vs', '--alluredir', ALLURE_RESULTS_DIR, '--cache-clear', TEST_CASES_DIR,
                       f'--junitxml={JUNIT_REPORT_PATH}']
        log.debug(f"执行 pytest 的参数: {pytest_args}")
        pytest.main(pytest_args)
        log.debug("pytest 测试执行完毕。")
    except Exception as e:
        log.error(f"执行 pytest 时出现错误: {e}")


def main():
    """主函数，协调各个功能函数执行"""
    log.debug("开始执行 pytest 测试及报告生成...")

    # 确保必要的目录存在
    os.makedirs(ALLURE_RESULTS_DIR, exist_ok=True)
    os.makedirs(os.path.dirname(JUNIT_REPORT_PATH), exist_ok=True)

    run_pytest()
    generate_allure_report()

    log.debug("所有操作执行完毕。")


if __name__ == '__main__':
    main()
    # time.sleep(10)
    # access_token = '99c5fd91d473df2c2e262392327230f38dcd7851a64029d267ef1181fb3045d3'  # 自己调试的机器人
    # send_ding_talk_message(access_token)
